package com.letv.core.utils;

import android.app.KeyguardManager;
import android.content.Context;
import android.os.PowerManager;
import android.util.DisplayMetrics;

/**
 * 
 * @author 吴新荣
 * 屏幕显示信息工具类
 * 获取屏幕宽度、高度、像素密度等
 */
public class ScreenInfoUtils {
    /**
     * 屏幕宽度（绝对像素单位）
     */
    private static int mWidth = 0;
    /**
     * 屏幕高度（绝对像素单位）
     */
    private static int mHeight = 0;
    /**
     * 屏幕宽度密度
     */
    private static float mXdpi;
    /**
     * 屏幕高度密度
     */
    private static float mYdpi;
    /**
     * 屏幕密度
     */
    private static float mDensity;

    private static float mDensityDpi;
    
    private static float mScaledDensity;
    
    private static void getDisplayMetricsInfo(Context context) {

        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        
        mWidth = dm.widthPixels;
        mHeight = dm.heightPixels;
        mXdpi = dm.xdpi;
        mYdpi = dm.ydpi;
        mDensity = dm.density;
        mDensityDpi = dm.densityDpi;
        mScaledDensity = dm.scaledDensity;
    }

    /**
     * 获取屏幕宽度，绝对像素单位
     * @return
     */
    public static int getWidth(Context context) {
        if (mWidth == 0) {
            getDisplayMetricsInfo(context);  
        }
        return mWidth;
    }

    /**
     * 获取屏幕高度，绝对像素单位
     * @return
     */
    public int getHeight() {
        return mHeight;
    }

    public float getXdpi() {
        return mXdpi;
    }

    public float getYdpi() {
        return mYdpi;
    }

    public float getDensity() {
        return mDensity;
    }

    public float getDensityDpi() {
        return mDensityDpi;
    }
    
    public float getScaledDensity() {
        return mScaledDensity;
    }

    /**
	 * 获取屏幕是否是亮 还是 暗？
	 * @return
	 * 如果isScreenOn为true，则表示屏幕“亮”了，否则屏幕“暗”了。
	 * 如果flag为true，表示有两种状态：
	 * a、屏幕是黑的
	 * b、目前正处于解锁状态
	 * 如果flag为false，表示目前未锁屏
	 */
//	public static boolean reflectScreenState() {
//		boolean isScreenOn = true;
//		boolean flag = false;
//		try {
//			PowerManager pm = (PowerManager) BaseApplication.getInstance().getSystemService(Context.POWER_SERVICE);
//			isScreenOn = pm.isScreenOn();
//			KeyguardManager mKeyguardManager = (KeyguardManager) BaseApplication.getInstance().getSystemService(Context.KEYGUARD_SERVICE);
//			flag = mKeyguardManager.inKeyguardRestrictedInputMode();
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return isScreenOn && !flag;
//	}

    public static boolean reflectScreenState(Context context) {
        boolean isScreenOn = true;
        boolean flag = false;
        try {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            isScreenOn = pm.isScreenOn();
            KeyguardManager mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
            flag = mKeyguardManager.inKeyguardRestrictedInputMode();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return isScreenOn && !flag;
    }
}
